.\" Copyright (c) 1992/3 Theo de Raadt <deraadt@fsa.ca>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. The name of the author may not be used to endorse or promote
.\"    products derived from this software without specific prior written
.\"    permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"     from: @(#)yp.8	1.0 (deraadt) 4/26/93
.\" $FreeBSD: src/share/man/man8/yp.8,v 1.36 2005/01/21 08:36:40 ru Exp $
.\"
.\" @APPLE_LICENSE_HEADER_START@
.\"
.\" Portions Copyright (c) 2003-2013 Apple Inc.  All Rights Reserved.
.\"
.\" This file contains Original Code and/or Modifications of Original Code
.\" as defined in and that are subject to the Apple Public Source License
.\" Version 2.0 (the 'License'). You may not use this file except in
.\" compliance with the License. Please obtain a copy of the License at
.\" http://www.opensource.apple.com/apsl/ and read it before using this
.\" file.
.\"
.\" The Original Code and all software distributed under the License are
.\" distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
.\" EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
.\" INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
.\" FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
.\" Please see the License for the specific language governing rights and
.\" limitations under the License.
.\"
.\" @APPLE_LICENSE_HEADER_END@
.\"
.Dd April 5, 1993
.Dt YP 8
.Os
.Sh NAME
.Nm yp
.Nd description of the YP/NIS system
.Sh SYNOPSIS
.Nm
.Sh DESCRIPTION
The
.Nm YP
subsystem allows network access to directory information hosted by
.Tn NIS
servers.
OS X support is provided through the functions
.Xr getpwent 3 ,
.Xr getgrent 3 ,
.Xr getfsent 3 ,
.Xr getnetgrent 3 ,
.Xr gethostent 3 ,
.Xr getnetent 3 ,
.Xr getrpcent 3 ,
.Xr getprotoent 3 ,
.Xr getservent 3 ,
.Xr ethers 3
and other related functions.
Queries to 
.Tn NIS
servers are sent by the
.Nm opendirectoryd
daemon.
The configuration of
.Tn NIS
clients is further described in the
.Xr opendirectoryd 8
manual page.
.Pp
The
.Nm YP
subsystem is started automatically by
.Xr launchd 8
if an
.Tn NIS
domain is specified in the
.Pa /etc/defaultdomain
configuration file,
and if the directory
.Pa /var/yp
exists (which it does in the default distribution).
.Pp
.Tn NIS
is an
.Tn RPC Ns -based
client/server system that allows a group of
machines within an
.Tn NIS
domain to share a common set of configuration files.
This permits a system
administrator to set up
.Tn NIS
client systems with only minimal configuration
data and add, remove or modify configuration data from a single location.
.Pp
The canonical copies of all
.Tn NIS
information are stored on a single machine
called the
.Tn NIS
.Em "master server" .
The databases used to store the information are called
.Tn NIS
.Em maps .
A single
.Tn NIS
server can
support several domains at once, therefore it is possible to have several
such directories, one for each supported domain.
Each domain will have
its own independent set of maps.
.Pp
Client
.Tn NIS
systems receive all
.Tn NIS
data in
.Tn ASCII
form.
.Pp
There are three main types of
.Tn NIS
systems:
.Bl -enum
.It
.Tn NIS
clients,
which query
.Tn NIS
servers for information.
.It
.Tn NIS
master servers,
which maintain the canonical copies of all
.Tn NIS
maps.
.It
.Tn NIS
slave servers,
which maintain backup copies of
.Tn NIS
maps that are periodically
updated by the master.
.El
.Pp
OS X systems may be configured as
.Tn NIS
clients, but not as master or slave servers.
.Pp
A
.Tn NIS
client establishes what is called a
.Em binding
to a particular
.Tn NIS
server using the
.Xr ypbind 8
daemon.
The
.Xr ypbind 8
utility checks the system's default domain (as set by the
.Xr domainname 1
command) and begins broadcasting
.Tn RPC
requests on the local network.
These requests specify the name of the domain for which
.Xr ypbind 8
is attempting to establish a binding.
If a server that has been
configured to serve the requested domain receives one of the broadcasts,
it will respond to
.Xr ypbind 8 ,
which will record the server's address.
If there are several servers
available (a master and several slaves, for example),
.Xr ypbind 8
will use the address of the first one to respond.
From that point
on, the client system will direct all of its
.Tn NIS
requests to that server.
The
.Xr ypbind 8
utility will occasionally
.Dq ping
the server to make sure it is still up
and running.
If it fails to receive a reply to one of its pings
within a reasonable amount of time,
.Xr ypbind 8
will mark the domain as unbound and begin broadcasting again in the
hopes of locating another server.
.Pp
.Tn NIS
master and slave servers handle all
.Tn NIS
requests with the
.Xr ypserv 8
daemon.
The
.Xr ypserv 8
utility is responsible for receiving incoming requests from
.Tn NIS
clients,
translating the requested domain and map name to a path to the
corresponding database file and transmitting data from the database
back to the client.
There is a specific set of requests that
.Xr ypserv 8
is designed to handle, most of which are implemented as functions
within the standard system libraries:
.Bl -tag -width ".Fn yp_master"
.It Fn yp_order
check the creation date of a particular map
.It Fn yp_master
obtain the name of the
.Tn NIS
master server for a given
map/domain
.It Fn yp_match
lookup the data corresponding to a given in key in a particular
map/domain
.It Fn yp_first
obtain the first key/data pair in a particular map/domain
.It Fn yp_next
pass
.Xr ypserv 8
a key in a particular map/domain and have it return the
key/data pair immediately following it (the functions
.Fn yp_first
and
.Fn yp_next
can be used to do a sequential search of an
.Tn NIS
map)
.It Fn yp_all
retrieve the entire contents of a map
.El
.Pp
There are a few other requests which
.Xr ypserv 8
is capable of handling (i.e., acknowledge whether or not you can handle
a particular domain
.Pq Dv YPPROC_DOMAIN ,
or acknowledge only if you can handle the domain and be silent otherwise
.Pq Dv YPPROC_DOMAIN_NONACK )
but
these requests are usually generated only by
.Xr ypbind 8
and are not meant to be used by standard utilities.
.Sh HISTORY
The
.Nm YP
subsystem was written from the ground up by
.An Theo de Raadt
to be compatible to Sun's implementation.
Bug fixes, improvements
and
.Tn NIS
server support were later added by
.An Bill Paul .
The server-side code was originally written by
.An Peter Eriksson
and
.An Tobias Reber
and is subject to the GNU Public License.
No Sun code was
referenced.
.Pp
OS X
.Tn NIS
client software is derived from FreeBSD.
